package command;

import command.commandImpl.LightOnCommand;
import command.commandImpl.StereoAddVolCommand;
import command.commandImpl.StereoOffCommand;
import command.commandImpl.StereoOnCommand;
import command.facility.Light;
import command.facility.Stereo;

/**
 * @author: zhouyang
 * @descrpition: 命令模式
 * 将所有的执行者和命令的请求者解耦
 * 所有的命令抽象成command接口 具体的实现类自己实现
 * @time: 2019-05-26 16:41
 */
public class Main {
    public static void main(String[] args) {
        Light roomLight = new Light("roomLight");
        Command command = new LightOnCommand(roomLight);
        command.execute();
        command.execute();//duplicated

        Stereo stereo = new Stereo("stereo1",10);
        command = new StereoOnCommand(stereo);
        command.execute();
        command = new StereoAddVolCommand(stereo);
        command.execute();
        command = new StereoOffCommand(stereo);
        command.execute();


        //如果想要更加抽象 可以设置一个commandController的类
        //这个类负责 连接command和slot
        //那么我们只需要在方法被加载时  传入 具体facility类 和 commond对象 还有slot值
        //那么最终调用slot值就会 使用相应的方法

        //还可以执行宏命令 也实现command类 只是在执行时依次执行传入的若干command
    }
}

